/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package servicos;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.*;

/**
 *
 * @author Edemilson
 */
public class AssinaturaDSA {
    
    
    
    public KeyPair gerarParChaves() {
        
        KeyPairGenerator chaves = null;       
        KeyPair parChaves = null;
                
        try
        {
            chaves = KeyPairGenerator.getInstance("DSA");            
            chaves.initialize(512);
            System.out.println("Gerando o par de chaves...");
            parChaves = chaves.generateKeyPair();
                   
        }
        catch(Exception e) {
            System.out.println(e.getMessage());        
        }
        
        return parChaves;
        
    }
    
    public byte[] assinar(PrivateKey chavePrivada, byte[] mensagem) {
        byte[] assina = null;
        try
        {
        Signature sgn = Signature.getInstance("DSA");
            
            
            sgn.initSign(chavePrivada);
            sgn.update(mensagem);
            assina = sgn.sign();
        }
        catch(Exception e) {}
        
        return assina;
    }
    
    public boolean verificarAssinatura(PublicKey chavePublica, byte[] mensagem, byte[] assina) {
       boolean ok = false;
        try
        {
            Signature vrf = Signature.getInstance("DSA");
            vrf.initVerify(chavePublica);
            vrf.update(mensagem);            
            ok = vrf.verify(assina);
            System.out.println("Validou: " + ok);
        }
        catch(Exception e) {}
        
        
        return ok;
    }
    
    
    
    
    /**public static void main(String[] args) {
        
        
        AssinaturaDSA dsa = new AssinaturaDSA();
        
        KeyPair par = dsa.gerarParChaves();
        
        
        System.out.println(par.getPrivate().toString());
        System.out.println(par.getPublic().toString());
        
        
        String mensagem = "Teste";
        
        byte[] assina = dsa.assinar(par.getPrivate(), mensagem);
        
        
        boolean ok = dsa.verificarAssinatura(par.getPublic(), mensagem, assina);
        
        
        System.out.println(ok);
        
        
        
        
        
        
    }**/
    
    
    
    
}
